package com.jt.www.domain.vo;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jt.www.model.issue.InsuranceCompanyVO;
import com.jt.www.model.vo.sdCheck.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@ApiModel(description = "保单详情")
public class PolicyDetailVO {

    /**
     * 产品分类1级
     */
    @ApiModelProperty(value = "产品分类1级")
    private String productCategory1;

    /**
     * 产品分类2级
     */
    @ApiModelProperty(value = "产品分类2级")
    private String productCategory2;

    /**
     * 产品分类3级
     */
    @ApiModelProperty(value = "产品分类3级")
    private String productCategory3;

    @ApiModelProperty(value = " 出单方式： 线上出单（01） 线下出单（00） 根据产品配置来确定。")
    private String issueType;

    @ApiModelProperty(value = "渠道类型（01特惠保）")
    private String channelType;

    @ApiModelProperty(value = "保险天数")
    private Integer term;

    @ApiModelProperty(value = "出单年份")
    private String insureYear;

    @ApiModelProperty(value = "用户编码")
    private String userCode;

    /**
     * 订单号
     */
    @ApiModelProperty(value = "订单号")
    private String orderCode;

    /**
     * 续保标记（Y是/N否）
     */
    @ApiModelProperty(value = "续保标记（Y是/N否）")
    private String renewal;

    /**
     * 续保保单号
     */
    @ApiModelProperty(value = "续保保单号")
    private String renewPolicyNo;

    /**
     * 续保次数
     */
    @ApiModelProperty(value = "续保次数")
    private String renewTimes;

    /**
     * 投保人信息
     */
    @ApiModelProperty(value = "投保人信息")
    private HolderForProVO holder = null;

    /**
     * 省编码
     */
    @ApiModelProperty(value = "省编码")
    private String provinceCode;

    /**
     * 城市编码
     */
    @ApiModelProperty(value = "城市编码")
    private String cityCode;

    /**
     * 区县编码
     */
    @ApiModelProperty(value = "区县编码")
    private String countyCode;

    /**
     * 投保单号
     */
    @ApiModelProperty(value = "投保单号")
    private String appCode;

    /**
     * 保单号
     */
    @ApiModelProperty(value = "保单号")
    private String policyNo;

    /**
     * 产品编码
     */
    @ApiModelProperty(value = "产品编码")
    private String productCode;

    /**
     * 产品名称
     */
    @ApiModelProperty(value = "产品名称")
    private String productName;

    /**
     * 渠道编码
     */
    @ApiModelProperty(value = "渠道编码")
    private String channelCode;

    /**
     * 渠道名称
     */
    @ApiModelProperty(value = "渠道名称")
    private String channelName;

    /**
     * 机构编码
     */
    @ApiModelProperty(value = "江泰分公司机构编码")
    private String branchCode;

    /**
     * 机构名称
     */
    @ApiModelProperty(value = "江泰分公司机构名称")
    private String branchName;

    /**
     * 项目编码
     */
    @ApiModelProperty(value = "项目编码")
    private String projectCode;

    /**
     * 项目名称
     */
    @ApiModelProperty(value = "项目名称")
    private String projectName;

    /**
     * 投保人名称
     */
    @ApiModelProperty(value = "投保人名称")
    private String holderName;

    /**
     * 被保人名称
     */
    @ApiModelProperty(value = "被保人名称")
    private String insuredName;

    /**
     * 投保日期
     */
    @ApiModelProperty(value = "投保日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date applicationDate;

    /**
     * 追溯期
     */
    @ApiModelProperty(value = "追溯期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date retroactiveDate;

    /**
     * 保险起期
     */
    @ApiModelProperty(value = "保险起期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date polStartDate;

    /**
     * 保险止期
     */
    @ApiModelProperty(value = "保险止期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date polEndDate;

    /**
     * 投保单状态
     */
    @ApiModelProperty(value = "投保单状态")
    private String appStatus;

    /**
     * 财务状态
     */
    @ApiModelProperty(value = "财务状态")
    private String financeStatus;

    /**
     * 保费
     */
    @ApiModelProperty(value = "保费")
    private BigDecimal premium = BigDecimal.ZERO;

    /**
     * 优惠保费
     */
    @ApiModelProperty(value = "优惠保费")
    private BigDecimal reducePremium = BigDecimal.ZERO;

    /**
     * 签单日期
     */
    @ApiModelProperty(value = "签单日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date issueDate;

    /**
     * 渠道权限范围
     */
    @ApiModelProperty(value = "渠道权限范围")
    private String channelScope;

    /**
     * 出单公司编码
     */
    @ApiModelProperty(value = "出单公司编码")
    private String issueCompanyCode;

    /**
     * 出单公司名称
     */
    @ApiModelProperty(value = "出单公司名称")
    private String issueCompanyName;

    /**
     * 主承出单公司名称
     */
    @ApiModelProperty(value = "主承出单公司名称")
    private String mainCompanyName;

    /**
     * 主承出单公司名称
     */
    @ApiModelProperty(value = "主承出单公司编码")
    private String mainCompanyCode;
    /**
     * 保单状态（有效（00）\终止（01）\失效（02））
     */
    @ApiModelProperty(value = "保单状态（有效（00）/终止（01）/失效（02））")
    private String polStatus;

    /**
     * 订单状态
     */
    @ApiModelProperty(value = "订单状态(待支付（01）/部分支付（02）/支付完成（03）/已完成（04）/已过期（05）/待核保（06）/核保失败（07）/支付失败（08）/已取消（09）/已删除（10）)")
    private String orderStatus;
    /**
     * 订单来源
     */
    @ApiModelProperty(value = "订单来源")
    private String source;

    /**
     * 保单状态
     */
    @ApiModelProperty(value = "保单状态（00生效/01终止/02失效）")
    private String policyStatus;

    /**
     * 承包公司
     */
    @ApiModelProperty(value = "承包公司")
    private List<InsuranceCompanyVO> insuranceCompanyVOS = null;


    /**
     * 投保单扩展字段
     */
    @ApiModelProperty(value = "投保单扩展字段")
    private List<ExtendForProVO> applicationFormExtendList = new ArrayList<ExtendForProVO>();

    /**
     * 保费计算因子
     */
    @ApiModelProperty(value = "发票信息")
    private List<PremiunFactorVo> premiunFactorVos;

    /**
     * 投保单附件集合
     */
    @ApiModelProperty(value = "投保单附件集合")
    private List<AttachmentForProVO> appAttachmentList = new ArrayList<AttachmentForProVO>(0);

    /**
     * 投保单扩展集合
     */
    @ApiModelProperty(value = "投保单扩展集合")
    private List<ExtendForProVO> extendList;

    /**
     * 保单附件集合
     */
    @ApiModelProperty(value = "保单附件集合")
    private List<AttachmentForProVO> polAttachmentList = new ArrayList<AttachmentForProVO>(0);


    @ApiModelProperty(value = "投保单信息")
    private TApplicationForm tApplicationForm;

    /**
     * 被保人信息
     */
    @ApiModelProperty(value = "被保人信息")
    private List<InsuredForProVO> insuredList = null;

    /**
     * 险种信息
     */
    @ApiModelProperty(value = "险种信息")
    private List<RiskForProVO> riskList = null;

    public String getProductCategory1() {
        return productCategory1;
    }

    public void setProductCategory1(String productCategory1) {
        this.productCategory1 = productCategory1;
    }

    public String getProductCategory2() {
        return productCategory2;
    }

    public void setProductCategory2(String productCategory2) {
        this.productCategory2 = productCategory2;
    }

    public String getProductCategory3() {
        return productCategory3;
    }

    public void setProductCategory3(String productCategory3) {
        this.productCategory3 = productCategory3;
    }

    public String getIssueType() {
        return issueType;
    }

    public void setIssueType(String issueType) {
        this.issueType = issueType;
    }

    public String getChannelType() {
        return channelType;
    }

    public void setChannelType(String channelType) {
        this.channelType = channelType;
    }

    public Integer getTerm() {
        return term;
    }

    public void setTerm(Integer term) {
        this.term = term;
    }

    public String getInsureYear() {
        return insureYear;
    }

    public void setInsureYear(String insureYear) {
        this.insureYear = insureYear;
    }

    public String getUserCode() {
        return userCode;
    }

    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }

    public String getOrderCode() {
        return orderCode;
    }

    public void setOrderCode(String orderCode) {
        this.orderCode = orderCode;
    }

    public String getRenewal() {
        return renewal;
    }

    public void setRenewal(String renewal) {
        this.renewal = renewal;
    }

    public String getRenewPolicyNo() {
        return renewPolicyNo;
    }

    public void setRenewPolicyNo(String renewPolicyNo) {
        this.renewPolicyNo = renewPolicyNo;
    }

    public String getRenewTimes() {
        return renewTimes;
    }

    public void setRenewTimes(String renewTimes) {
        this.renewTimes = renewTimes;
    }

    public HolderForProVO getHolder() {
        return holder;
    }

    public void setHolder(HolderForProVO holder) {
        this.holder = holder;
    }

    public String getProvinceCode() {
        return provinceCode;
    }

    public void setProvinceCode(String provinceCode) {
        this.provinceCode = provinceCode;
    }

    public String getCityCode() {
        return cityCode;
    }

    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }

    public String getCountyCode() {
        return countyCode;
    }

    public void setCountyCode(String countyCode) {
        this.countyCode = countyCode;
    }

    public String getAppCode() {
        return appCode;
    }

    public void setAppCode(String appCode) {
        this.appCode = appCode;
    }

    public String getPolicyNo() {
        return policyNo;
    }

    public void setPolicyNo(String policyNo) {
        this.policyNo = policyNo;
    }

    public String getProductCode() {
        return productCode;
    }

    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getChannelCode() {
        return channelCode;
    }

    public void setChannelCode(String channelCode) {
        this.channelCode = channelCode;
    }

    public String getChannelName() {
        return channelName;
    }

    public void setChannelName(String channelName) {
        this.channelName = channelName;
    }

    public String getBranchCode() {
        return branchCode;
    }

    public void setBranchCode(String branchCode) {
        this.branchCode = branchCode;
    }

    public String getBranchName() {
        return branchName;
    }

    public void setBranchName(String branchName) {
        this.branchName = branchName;
    }

    public String getProjectCode() {
        return projectCode;
    }

    public void setProjectCode(String projectCode) {
        this.projectCode = projectCode;
    }

    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    public String getHolderName() {
        return holderName;
    }

    public void setHolderName(String holderName) {
        this.holderName = holderName;
    }

    public String getInsuredName() {
        return insuredName;
    }

    public void setInsuredName(String insuredName) {
        this.insuredName = insuredName;
    }

    public Date getApplicationDate() {
        return applicationDate;
    }

    public void setApplicationDate(Date applicationDate) {
        this.applicationDate = applicationDate;
    }

    public Date getRetroactiveDate() {
        return retroactiveDate;
    }

    public void setRetroactiveDate(Date retroactiveDate) {
        this.retroactiveDate = retroactiveDate;
    }

    public Date getPolStartDate() {
        return polStartDate;
    }

    public void setPolStartDate(Date polStartDate) {
        this.polStartDate = polStartDate;
    }

    public Date getPolEndDate() {
        return polEndDate;
    }

    public void setPolEndDate(Date polEndDate) {
        this.polEndDate = polEndDate;
    }

    public String getAppStatus() {
        return appStatus;
    }

    public void setAppStatus(String appStatus) {
        this.appStatus = appStatus;
    }

    public String getFinanceStatus() {
        return financeStatus;
    }

    public void setFinanceStatus(String financeStatus) {
        this.financeStatus = financeStatus;
    }

    public BigDecimal getPremium() {
        return premium;
    }

    public void setPremium(BigDecimal premium) {
        this.premium = premium;
    }

    public BigDecimal getReducePremium() {
        return reducePremium;
    }

    public void setReducePremium(BigDecimal reducePremium) {
        this.reducePremium = reducePremium;
    }

    public Date getIssueDate() {
        return issueDate;
    }

    public void setIssueDate(Date issueDate) {
        this.issueDate = issueDate;
    }

    public String getChannelScope() {
        return channelScope;
    }

    public void setChannelScope(String channelScope) {
        this.channelScope = channelScope;
    }

    public String getIssueCompanyCode() {
        return issueCompanyCode;
    }

    public void setIssueCompanyCode(String issueCompanyCode) {
        this.issueCompanyCode = issueCompanyCode;
    }

    public String getIssueCompanyName() {
        return issueCompanyName;
    }

    public void setIssueCompanyName(String issueCompanyName) {
        this.issueCompanyName = issueCompanyName;
    }

    public String getMainCompanyName() {
        return mainCompanyName;
    }

    public void setMainCompanyName(String mainCompanyName) {
        this.mainCompanyName = mainCompanyName;
    }

    public String getMainCompanyCode() {
        return mainCompanyCode;
    }

    public void setMainCompanyCode(String mainCompanyCode) {
        this.mainCompanyCode = mainCompanyCode;
    }

    public String getPolStatus() {
        return polStatus;
    }

    public void setPolStatus(String polStatus) {
        this.polStatus = polStatus;
    }

    public String getOrderStatus() {
        return orderStatus;
    }

    public void setOrderStatus(String orderStatus) {
        this.orderStatus = orderStatus;
    }

    public String getSource() {
        return source;
    }

    public void setSource(String source) {
        this.source = source;
    }

    public String getPolicyStatus() {
        return policyStatus;
    }

    public void setPolicyStatus(String policyStatus) {
        this.policyStatus = policyStatus;
    }

    public List<InsuranceCompanyVO> getInsuranceCompanyVOS() {
        return insuranceCompanyVOS;
    }

    public void setInsuranceCompanyVOS(List<InsuranceCompanyVO> insuranceCompanyVOS) {
        this.insuranceCompanyVOS = insuranceCompanyVOS;
    }

    public List<ExtendForProVO> getApplicationFormExtendList() {
        return applicationFormExtendList;
    }

    public void setApplicationFormExtendList(List<ExtendForProVO> applicationFormExtendList) {
        this.applicationFormExtendList = applicationFormExtendList;
    }

    public List<PremiunFactorVo> getPremiunFactorVos() {
        return premiunFactorVos;
    }

    public void setPremiunFactorVos(List<PremiunFactorVo> premiunFactorVos) {
        this.premiunFactorVos = premiunFactorVos;
    }

    public List<AttachmentForProVO> getAppAttachmentList() {
        return appAttachmentList;
    }

    public void setAppAttachmentList(List<AttachmentForProVO> appAttachmentList) {
        this.appAttachmentList = appAttachmentList;
    }

    public List<ExtendForProVO> getExtendList() {
        return extendList;
    }

    public void setExtendList(List<ExtendForProVO> extendList) {
        this.extendList = extendList;
    }

    public List<AttachmentForProVO> getPolAttachmentList() {
        return polAttachmentList;
    }

    public void setPolAttachmentList(List<AttachmentForProVO> polAttachmentList) {
        this.polAttachmentList = polAttachmentList;
    }

    public TApplicationForm gettApplicationForm() {
        return tApplicationForm;
    }

    public void settApplicationForm(TApplicationForm tApplicationForm) {
        this.tApplicationForm = tApplicationForm;
    }

    public List<InsuredForProVO> getInsuredList() {
        return insuredList;
    }

    public void setInsuredList(List<InsuredForProVO> insuredList) {
        this.insuredList = insuredList;
    }

    public List<RiskForProVO> getRiskList() {
        return riskList;
    }

    public void setRiskList(List<RiskForProVO> riskList) {
        this.riskList = riskList;
    }
}
